package com.seeyon.apps.nygj.util;

import com.seeyon.ctp.common.log.CtpLogFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;

import java.io.File;
import java.io.FileInputStream;


public class FtpKit {

    private static final Log log = CtpLogFactory.getLog(FtpKit.class);

    public static boolean uploadFile(File file, String fileName, String path, String host, String port, String user, String password) throws Exception {

        FTPClient ftpClient = getFtpClient(host, port, user, password);  // 获取FTP客户端实例
        FileInputStream fileInputStream = new FileInputStream(file);  // 创建文件输入流
        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);  // 设置文件类型为二进制
        ftpClient.changeWorkingDirectory(path);  // 更改工作目录
        boolean isUpload = ftpClient.storeFile(fileName, fileInputStream);  // 将文件上传到FTP服务器
        if (!isUpload) {
            log.info("通过ftp模式上传文件到FTP服务器失败:" + ftpClient.getReplyString());  // 如果上传失败，则记录失败信息
        }
        fileInputStream.close();  // 关闭文件输入流
        ftpClient.logout();  // 注销FTP客户端
        return isUpload;  // 返回上传结果
    }

    /**
     * 获取FTPClient对象
     *
     * @return FTPClient对象
     * @throws Exception 异常
     */
    private static FTPClient getFtpClient(String host, String port, String user, String password) throws Exception {
//        String host = str(FormulaUtil.getVar("FTP_IP"));
//        String port = str(FormulaUtil.getVar("FTP_PORT"));
//        String user = str(FormulaUtil.getVar("FTP_USER"));
//        String password = str(FormulaUtil.getVar("FTP_PASSWORD"));
        // 创建FTPClient对象
        FTPClient ftpClient = new FTPClient();
        // 设置控制编码为GB2312
        ftpClient.setControlEncoding("GB2312");
        // 连接到FTP服务器
        ftpClient.connect(host, Integer.parseInt(port));
        // 登录FTP服务器
        ftpClient.login(user, password);
        // 输出日志信息，表示ftp服务连接成功
        log.info("ftp服务连接成功!");
        // 进入本地被动模式
        ftpClient.enterLocalPassiveMode();
        // 返回FTPClient对象
        return ftpClient;
    }

    private static File createFolder(String path) {
        File ret = null;
        File file = new File(path);
        if (!file.exists()) {
            if (file.mkdirs()) {
                ret = file;
            }
        } else {
            ret = file;
        }
        return ret;
    }

    private static String str(Object o) {
        // 检查对象是否为null，是则返回空字符串
        if (o == null) {
            return "";
        }
        // 如果对象本身就是字符串，直接返回该字符串
        if (o instanceof String) {
            return (String) o;
        }
        // 对于其他情况，返回对象的toString()结果
        return o.toString();
    }

    public static void main(String[] args) throws Exception {
        String host = "192.168.126.60";
        String port = "21";
        String user = "OA_FTP";
        String password = "Xzndkyy600211!";
        String path = "/OA/";
        // 创建FTPClient对象
        FTPClient ftpClient = new FTPClient();
        // 设置控制编码为GB2312
        ftpClient.setControlEncoding("GB2312");
        // 连接到FTP服务器
        ftpClient.connect(host, Integer.parseInt(port));
        // 登录FTP服务器
        ftpClient.login(user, password);
        // 输出日志信息，表示ftp服务连接成功
        // 进入本地被动模式
        ftpClient.enterLocalPassiveMode();

        String ss = "D:\\system\\Desktop\\人工麝香合同.jpg";
        File folder = createFolder(ss);

        FileInputStream fileInputStream = new FileInputStream(folder);  // 创建文件输入流

        ftpClient.setFileType(FTP.BINARY_FILE_TYPE);  // 设置文件类型为二进制

        ftpClient.changeWorkingDirectory(path + folder.getName());  // 更改工作目录

        boolean isUpload = ftpClient.storeFile(folder.getName(), fileInputStream);  // 将文件上传到FTP服务器

        if (!isUpload) {
            log.info("通过ftp模式上传文件到FTP服务器失败:" + ftpClient.getReplyString());  // 如果上传失败，则记录失败信息
        }

        fileInputStream.close();  // 关闭文件输入流

        ftpClient.logout();  // 注销FTP客户端

        if (isUpload) {
            System.out.printf("上传成功");
        } else {
            System.out.printf("上传失败");
        }
    }

}
